package array;

/**
 * @author: june
 * @date: 2023/8/16
 * @description: 443. 压缩字符串
 * 给你一个字符数组 chars ，请使用下述算法压缩：
 * <p>
 * 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 ：
 * 如果这一组长度为 1 ，则将字符追加到 s 中。
 * 否则，需要向 s 追加字符，后跟这一组的长度。
 * 压缩后得到的字符串 s 不应该直接返回 ，需要转储到字符数组 chars 中。需要注意的是，如果组长度为 10 或 10 以上，则在 chars 数组中会被拆分为多个字符。
 * 请在 修改完输入数组后 ，返回该数组的新长度。
 * 你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
 **/

public class StringCompress_443 {
    public int compress(char[] chars) {
        int cnt = 0;
        char pre = chars[0];

        // 双指针，i遍历整个数组，j指针对应新插入的字符
        int i = 0;
        int j = 0;
        while (i < chars.length) {
            while (i < chars.length && chars[i] == pre) {
                cnt++;
                i++;
            }

            chars[j++] = pre;
            if (cnt != 1) {
                String s = Integer.toString(cnt);
                for (int k = 0; k < s.length(); k++) {
                    chars[j++] = s.charAt(k);
                }
            }

            if (i == chars.length) {
                break;
            }

            cnt = 0;
            pre = chars[i];
        }

        return j;
    }

    public static void main(String[] args) {
        StringCompress_443 compress_443 = new StringCompress_443();
        char[] chars = {'a'};
        int compress = compress_443.compress(chars);
        System.out.println(compress);

    }
}
